// export const debounce = (fn: Function, delay: number) => {
//     let timer : number | null | any = null
//     return (...args: any[]) => {
//         if(timer) {
//             clearTimeout(timer)
//         }
//         timer = setTimeout(() => {
//             fn(...args)
//         }, delay)
//     }
// }

// 防抖函数
function debounce(fn: Function, wait: number, immediate: boolean) {
  console.log('防抖')
  let timeout : number | null | any // 定义一个计时器变量，用于延迟执行函数
  return function (...args: []) {
    // 返回一个包装后的函数
    const context = this // 保存函数执行上下文对象
    const later = function () {
      // 定义延迟执行的函数
      timeout = null // 清空计时器变量
      if (!immediate) fn.apply(context, args) // 若非立即执行，则调用待防抖函数
    }
    const callNow = immediate && !timeout // 是否立即调用函数的条件
    clearTimeout(timeout) // 清空计时器
    timeout = setTimeout(later, wait) // 创建新的计时器，延迟执行函数
    if (callNow) fn.apply(context, args) // 如果满足立即调用条件，则立即执行函数
  }
}
export { debounce }
